<?php
/**
 * 用户类
 */
namespace app\admin\controller;
use app\admin\controller\Common;
use app\admin\model\Admins;
class User extends Common{

	/**
	 * 展示用户列表页
	 */
	public function lst(){

		//分配模版标头信息变量
		$this->setPageTitle("管理员列表","添加管理员",url('addShow'));

		//获取管理员信息
		$where = session('id') == 1 ? '' : 'a.aid <> 1';
		$filed = 'a.aid,account,role_name,create_time,is_allowed,last_time,last_ip';
		$data = db('Admin as a')->field($filed)->join('jd_admin_role ar','a.aid=ar.aid','LEFT')->join('jd_role r','r.rid=ar.rid','LEFT')->where($where)->select();

		//处理数据
		$admins = getListMeg( $data, 'aid', 'role_name' );

		//分配变量
		$this->assign('admins',$admins);
		
		//展示视图
		return view();
	}

	/**
	 * 展示用户添加页
	 */
	public function addShow(){

		//分配模版标头信息变量
		$this->setPageTitle("添加管理员","管理员列表",url('lst'));

		//角色信息
		$roles = db('role')->select();

		//分配变量
		$this->assign('roles',$roles);

		//展示视图
		return view('add');
	}

	/**
	 * 添加用户
	 */
	public function add(){

		//安全处理
		if(!request()->isPost()){

			$this->error('你访问的页面不存在！');

		}

		//接收数据
		$data = input('post.');

		//验证数据
		$validate = \think\Loader::validate('Admins');
		if( !$validate->scene('add')->check($data) ) {

			$this->error( $validate->getError() );

		}

		//判断用户是否存在
		if( db('Admin')->getbyAccount($data['username']) ) {

			$this->error('该用户已存在，请换一个名称！');

		}

		//处理数据
		$userModel = new Admins();
		$userModel->account = $data['username'];
		$userModel->password = md5( config('md5_keygen').$data['password'] );
		$userModel->create_time = time();
		$userModel->is_allowed = $data['is_use']+0;
		$userModel->last_time = time();
		$userModel->last_ip = ip2long(request()->ip());

		//添加管理员
		if( $userModel->allowField(true)->save() ) {

			//获取最后一次插入id
			$id = $userModel->getLastInsID();

			//获取最后插入的数据对象
			$user = Admins::get($id);

			//处理角色信息
			$roles = array_map('intval', $data['role_id']);

			//向管理员角色表插入信息
			if( !$user->role()->attach($roles) ) {
				$this->error('管理员添加成功，但管理员角色添加失败，可以去管理员列表对当前管理员进行更改操作！');
			}

			//获取最后执行的sql语句
			$sql = Admins::getLastSql();

			//添加管理员日志
			adminLog( session('id'), '添加了用户：'.$data['username'], $sql );

			$this->success('添加成功！',url('lst'));

		}else{

			$this->error('添加失败！');
			
		}

	}

	/**
	 * 展示用户修改页
	 */
	public function editShow(){
		
		//分配模版标头信息变量
		$this->setPageTitle("修改管理员","管理员列表",url('lst'));

		//角色信息
		$roles = db('role')->select();

		//管理员信息
		$id = input('id')+0;
		$where = 'a.aid = '.$id;
		$data = db('admin as a')->join('jd_admin_role ar','a.aid = ar.aid','LEFT')->where($where)->select();

		//获取用户信息
		$admin = getOneArr( $data, 'rid' );
		
		//分配变量
		$this->assign('roles',$roles);
		$this->assign('admin',$admin);

		//展示视图
		return view('edit');
	}

	/**
	 * 修改用户
	 */
	public function edit(){

		//安全处理
		if(!request()->isPost()){

			$this->error('你访问的页面不存在！');

		}

		//接收数据
		$data = input('post.');

		//验证数据
		$validate = \think\Loader::validate('Admins');
		if( !$validate->scene('edit')->check($data) ) {

			$this->error( $validate->getError() );

		}		

		//判断是否要修改密码
		if( !empty($data["password"]) ) {
			
			//验证数据
			if( !$validate->scene('pwd')->check($data) ) {
				
				$this->error( $validate->getError() );

			}

		}

		//处理数据
		$userModel = new Admins();
		$id = $data['admin_id']+0;
		$userModel->aid = $id;
		$userModel->account = $data['username'];
		$userModel->is_allowed = $data['is_use']+0;
		if( !empty($data["password"]) ){
			$userModel->password = $data['password'];
		}

		//修改管理员
		if( false !== $userModel->allowField(true)->isUpdate(true)->save() ) {

			//获取更新用户的数据对象
			$user = Admins::get($id);

			//处理角色信息
			$roles = array_map('intval', $data['role_id']);

			//将管理员角色数据全部删除
			$user->role()->detach();

			//向管理员角色表插入新的数据
			if( !$user->role()->attach($roles) ) {
				$this->error('管理员修改成功，但管理员角色修改失败，可以去管理员列表对当前管理员进行更改操作！');
			}

			//获取最后执行的sql语句
			$sql = Admins::getLastSql();

			//添加管理员日志
			adminLog( session('id'), '更新了用户：'.$data['username'], $sql );

			$this->success('修改成功！',url('lst'));

		}else{

			$this->error('修改失败！');
			
		}

	}

	/**
	 * 异步删除用户
	 */
	public function del(){

		//安全处理
		if(!request()->isAjax()){

			$this->error('你访问的页面不存在！');

		}

		//获取id
		$id = input('id')+0;

		//如果id为1直接返回
		if($id == 1){
			echo json_encode( ['status'=>0,'msg'=>'admin用户禁止删除！'] );
		}

		//删除用户
		$admin = Admins::get($id);
		if( $admin->destroy($id) ){

			//删除关联表，管理员角色表数据
			$admin->role()->detach();

			//获取最后执行的sql语句
			$sql = Admins::getLastSql();

			//添加管理员日志
			adminLog( session('id'), '删除了用户：'.$admin->account, $sql );

			echo json_encode( ['status'=>1,'msg'=>'删除成功！'] );

		}else{

			echo json_encode( ['status'=>0,'msg'=>'删除失败！'] );

		}
	}

	/**
	 * 异步修改用户状态
	 */
	public function changeStatus(){

		//安全处理
		if(!request()->isAjax()){

			$this->error('你访问的页面不存在！');

		}

		//获取id
		$id = input('id')+0;

		//获取要修改的状态
		$statu = input('statu')+0;

		//如果id为1直接返回
		if($id == 1){
			echo json_encode( ['status'=>false,'msg'=>'admin用户禁止进行此操作！'] );
			die;
		}

		//修改用户状态
		$field = ['is_allowed'=>$statu,'aid'=>$id];//要修改的字段
		if( db('admin')->update($field) ){

			//设置返回状态，1：开启 2：禁用
			$status = $statu ? 1 : 2 ;

			echo json_encode( ['status'=>$status,'msg'=>'修改成功！'] );

		}else{

			echo json_encode( ['status'=>false,'msg'=>'修改失败！'] );

		}
	}
}